package com.wgy.Day28异常.异常的处理方法;

/**
 * Created by pc on 2020/11/26 0:26
 * Description: LearningJava
 */
/*
异常处理的五个关键字: try...catch(捕获异常),finally,throw(抛出异常),throws(声明异常)
Throw关键字:
  作用:可以使用throw关键字在指定的方法中抛出指定的异常
  使用格式: throw new xxxException("异常产生的原因");
  注意事项: 1.throw关键字必须写在方法的内部
           2.throw关键字后边new的对象必须是Exception或者Exception的子类对象.
           3.throw关键字抛出指定的异常对象,我们就必须处理这个异常对象
               throw关键字后面创建的是RuntimeException或者是RuntimeException的子类对象,我们可以不处理,默认交给JVM处理(打印异常对象,中断程序)
               throw关键字后面创建的是编译异常(写代码时候报错),我们就必须处理这个异常,要么throws,要么try...catch

以后工作中,我们首先必须对方法传递进来的参数进行合法性校验,如果参数不合法,那么我们就必须使用抛出异常的方法,告知方法的调用者,传递的参数有问题

注意:NullPointerException:是一个运行期异常,我们不用处理,默认交给JVM
    ArrayIndexOutOfBoundsException:是一个运行期异常,我们不用处理,默认交给JVM
*/
public class Demo03Throw {
    public static void main(String[] args) {
      //  int[] arr=null;
        int[] arr=new int[3];
        int e = getElement(arr, 3);
        System.out.println(e);
    }

    public static int getElement(int[] arr,int index){
        //我们对传递进来的数组进行合法性校验,如果arr的值是null,那么我们就抛出空指针异常,告知方法的调用者"传递的数组是null"
        if(arr==null){
            throw new NullPointerException("传递的数组是null");
        }
        //我们对传递进来的索引值进行合法性校验,如果index的范围不在数组的索引范围内,那么我们就抛出数组索引越界异常,
        // 告知方法的调用者"传递的索引超出了数组的使用范围"
        if(index<0||index>arr.length-1){
            throw new ArrayIndexOutOfBoundsException("传递的索引超出了数组的使用范围");
        }

        int ele=arr[index];
        return ele;
    }
}
